#include <gsl/gsl_matrix.h>
#include <gsl/gsl_linalg.h>
#include <gsl/gsl_cblas.h>
#include "matrix.h"

int main() {
	gsl_matrix* matrixA = gsl_matrix_alloc(2, 3);
	gsl_matrix* matrixB = gsl_matrix_alloc(3, 2);
	gsl_matrix* matrixD = gsl_matrix_alloc(3, 3);
	gsl_matrix* matrixC;
	gsl_matrix* matrixDInverse;

	gsl_matrix_set(matrixA, 0, 0, 0.11);
	gsl_matrix_set(matrixA, 0, 1, 0.12);
	gsl_matrix_set(matrixA, 0, 2, 0.13);
	gsl_matrix_set(matrixA, 1, 0, 0.21);
	gsl_matrix_set(matrixA, 1, 1, 0.22);
	gsl_matrix_set(matrixA, 1, 2, 0.78);

	gsl_matrix_set(matrixB, 0, 0, 1011.0);
	gsl_matrix_set(matrixB, 0, 1, 1012.0);
	gsl_matrix_set(matrixB, 1, 0, 1021.0);
	gsl_matrix_set(matrixB, 1, 1, 1022.0);
	gsl_matrix_set(matrixB, 2, 0, 1031.0);
	gsl_matrix_set(matrixB, 2, 1, 1032.0);

	matrixC = matrixMultiply(matrixA, matrixB);
	printMatrix(matrixC);

	matrixD = gsl_matrix_alloc(2, 2);
	gsl_matrix_set(matrixD, 0, 0, 1.0);
	gsl_matrix_set(matrixD, 0, 1, 2.0);
	gsl_matrix_set(matrixD, 1, 0, 3.0);
	gsl_matrix_set(matrixD, 1, 1, 4.0);

	matrixDInverse = invertMatrix2x2(matrixD);
	printMatrix(matrixDInverse);

	gsl_matrix_free(matrixA);
	gsl_matrix_free(matrixB);
	gsl_matrix_free(matrixC);
	gsl_matrix_free(matrixD);
	gsl_matrix_free(matrixDInverse);
	return 0;
}
